package service;

import mapper.InfoMapper;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import pojo.Info;
import util.SqlSessionFactoryUtil;

import java.util.List;

public class InfoService {
    private final SqlSessionFactory sqlSessionFactory = SqlSessionFactoryUtil.getSqlSessionFactory();

    public List<Info> selectAll() {
        SqlSession sqlSession = sqlSessionFactory.openSession();
        InfoMapper infoMapper = sqlSession.getMapper(InfoMapper.class);

        List<Info> infos = infoMapper.selectAll();

        sqlSession.close();
        return infos;
    }

    public List<Info> selectBaseInfo() {
        SqlSession sqlSession = sqlSessionFactory.openSession();
        InfoMapper infoMapper = sqlSession.getMapper(InfoMapper.class);

        List<Info> infos = infoMapper.selectBaseInfo();

        sqlSession.close();
        return infos;
    }

    public Info selectOneInfo(long infoNo) {
        SqlSession sqlSession = sqlSessionFactory.openSession();
        InfoMapper infoMapper = sqlSession.getMapper(InfoMapper.class);

        List<Info> infos = infoMapper.selectOneInfo(infoNo);

        sqlSession.close();
        return infos.isEmpty() ? null : infos.get(0);
    }

    public void updateOneInfo(Info info) {
        SqlSession sqlSession = sqlSessionFactory.openSession();
        InfoMapper mapper = sqlSession.getMapper(InfoMapper.class);

        mapper.updateInfo(info);

        sqlSession.commit();
        sqlSession.close();
    }

    public void deleteOneInfo(long infoNo) {
        SqlSession sqlSession = sqlSessionFactory.openSession();
        InfoMapper mapper = sqlSession.getMapper(InfoMapper.class);

        mapper.deleteOneInfoOfInfoNo(infoNo);

        sqlSession.commit();
        sqlSession.close();
    }

    public String selectOneInfoPath(long infoNo) {
        SqlSession sqlSession = sqlSessionFactory.openSession();
        InfoMapper mapper = sqlSession.getMapper(InfoMapper.class);

        List<String> paths = mapper.selectPath(infoNo);

        sqlSession.close();
        return paths.isEmpty() ? "" : paths.get(0);
    }

    public void addNewInfo(Info info) {
        SqlSession sqlSession = sqlSessionFactory.openSession();
        InfoMapper mapper = sqlSession.getMapper(InfoMapper.class);

        mapper.addNewInfo(info);

        sqlSession.commit();
        sqlSession.close();
    }
}
